package com.qding.park.adapter.report.controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSONObject;
import com.qding.park.adapter.bsg.adapter.constant.RequestFunEnum;
import com.qding.park.adapter.bsg.adapter.util.ResponseHelper;
import com.qding.park.adapter.report.util.ImgUtil;
import com.qding.park.common.core.cache.service.CacheServiceFacade;
import com.qding.park.common.core.exceptions.BaseException;
import com.qding.park.common.core.exceptions.ExceptionMessage;
import com.qding.park.common.core.exceptions.IExceptionHandle;
import com.qding.park.common.core.exceptions.business.validator.RchlValidatorException;
import com.qding.park.common.core.exceptions.system.SystemUnKnown;
import com.qding.park.common.core.validate.RchlValidateBean;
import com.qding.park.common.core.validate.RchlValidateTools;
import com.qding.park.common.utils.DateUtils;
import com.qding.park.common.utils.qiniu.ImgServiceInPrivate;
import com.qding.park.common.utils.string.StringUtil;
import com.qding.park.common.web.controller.BaseController;
import com.qding.park.manager.pojo.ap.ApAppearanceRecord;
import com.qding.park.manager.pojo.ap.ApApproachRecord;
import com.qding.park.manager.pojo.ap.ApCarLockAlarm;
import com.qding.park.manager.pojo.ap.ApDayReportInfo;
import com.qding.park.manager.pojo.ap.ApMonthlyFeeInfo;
import com.qding.park.manager.pojo.ap.ApReservationInReminder;
import com.qding.park.manager.pojo.ap.ApVisitingReminder;

@RestController
@EnableAutoConfiguration
public class ReportController extends BaseController {

	private static final Logger logger = LoggerFactory.getLogger(ReportController.class);

	// private static final Log _log =
	// LogFactory.getLog(ReportController.class);
	private static final Logger _log = LoggerFactory.getLogger(ReportController.class);

	@Autowired
	public IExceptionHandle exceptionHandle;

	@Autowired
	private CacheServiceFacade cacheServiceFacade;

	@Autowired
	private ImgServiceInPrivate imgServiceInPrivate;

	/**
	 * @param base64Str
	 *            文件的base64Str
	 * @param fileKey
	 *            上传之后的文件名
	 * @return
	 */
	private String uploadImg(String base64Str, String fileKey) {
		try {
//			String tarstr = base64Str.toString().replaceAll(" ", "+");
			Base64 base64 = new Base64();
			byte[] data = base64.decode(base64Str);
			String filepath = ImgUtil.uploadImg(imgServiceInPrivate, data, fileKey);
			data = null;
			return filepath;
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			return null;
		}
	}

	/**
	 * @Title: report @Description: TODO(车场数据上报接口) @param @param supplyID
	 *         车场软件供应商编号 @param @param requestFun 功能名称 @param @param data
	 *         上报的数据 @param @return 参数 @return String 返回类型 @throws
	 */
	@RequestMapping("/report")
	public String report(String supplyID, String requestFun, String data) {

		try {
			// _log.info("收到::supplyID="+supplyID+",requestFun="+requestFun+",data="+data);
			/****** 验证字段 ********/
			RchlValidateBean vb = new RchlValidateBean();
			vb.getRequiredValidate().put("supplyID", supplyID);
			vb.getRequiredValidate().put("requestFun", requestFun);
			vb.getRequiredValidate().put("data", data);

			/**************/
			String clientID = null;
			// cacheServiceFacade.updateParkonlinetime(supplyID, clientID);
			if (requestFun.equals(RequestFunEnum.Park_EventAlert_ParkingApply.name())) {
				// 来访提醒推送
				_log.info("收到了来访提醒::supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data);
				/******* 验证字段 **************/
				JSONObject jsonData = JSONObject.parseObject(data);
				vb.getJsonObjValidate().put("data", data);
				RchlValidateTools.validate(vb);
				// 车场编号
				clientID = jsonData.getString("clientID");
				// 卡号
				String cardCode = jsonData.getString("cardCode");
				// 车牌
				String plateNo = jsonData.getString("plateNo");
				// 入场时间
				String inDateTime = jsonData.getString("inDateTime");
				// 入场岗停
				String inRoom = jsonData.getString("inRoom");

				vb.getRequiredValidate().clear();

				vb.getRequiredValidate().put("clientID", clientID);
				vb.getRequiredValidate().put("plateNo", plateNo);
				vb.getRequiredValidate().put("inDateTime", inDateTime);
				vb.getRequiredValidate().put("inRoom", inRoom);
				RchlValidateTools.validate(vb);
				/******** 验证字段 *******************/

				ApVisitingReminder apVisitingReminder = new ApVisitingReminder();
				apVisitingReminder.setCardCode(cardCode);
				apVisitingReminder.setCarNum(plateNo);
				apVisitingReminder.setInDateTime(DateUtils.parseDate(inDateTime, DateUtils.DATE_LONG_DATE));
				apVisitingReminder.setInRoom(inRoom);
				apVisitingReminder.setParkId(clientID);
				apVisitingReminder.setSupplyID(supplyID);

				cacheServiceFacade.invite_incheck_queue_push(apVisitingReminder);
				// reportFacade.park_EventAlert_ParkingApply(apVisitingReminder);
			} else if (requestFun.equals(RequestFunEnum.Park_EventAlert_LockedCar.name())) {
				// 锁车辆出场报警推送
				_log.info("收到了锁车辆出场报警::supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data);
				/******* 验证字段 **************/
				JSONObject jsonData = JSONObject.parseObject(data);
				vb.getJsonObjValidate().put("data", data);
				RchlValidateTools.validate(vb);
				// 车场编号
				clientID = jsonData.getString("clientID");
				// 卡号
				String cardCode = jsonData.getString("cardCode");
				// 车牌
				String plateNo = jsonData.getString("plateNo");
				// 入场时间
				String inDateTime = jsonData.getString("inDateTime");
				// 入场岗停
				String inRoom = jsonData.getString("inRoom");

				vb.getRequiredValidate().clear();
				vb.getRequiredValidate().put("clientID", clientID);
				vb.getRequiredValidate().put("plateNo", plateNo);
				vb.getRequiredValidate().put("inDateTime", inDateTime);
				vb.getRequiredValidate().put("inRoom", inRoom);
				RchlValidateTools.validate(vb);
				/******* 验证字段 **************/

				ApCarLockAlarm apCarLockAlarm = new ApCarLockAlarm();
				apCarLockAlarm.setAlarmTime(DateUtils.parseDate(inDateTime, DateUtils.DATE_LONG_DATE));
				apCarLockAlarm.setCardCode(cardCode);
				apCarLockAlarm.setCarNum(plateNo);
				apCarLockAlarm.setOutRoom(inRoom);
				apCarLockAlarm.setParkId(clientID);
				apCarLockAlarm.setSupplyID(supplyID);
				// reportFacade.park_EventAlert_LockedCar(apCarLockAlarm);
				cacheServiceFacade.carLock_outAlarm_queue_push(apCarLockAlarm);
			} else if (requestFun.equals(RequestFunEnum.Park_EventAlert_ParkingAreaPrep.name())) {
				// 预定车辆入场 推送
				_log.info("收到了预定车辆入场::supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data);
				/******* 验证字段 **************/
				JSONObject jsonData = JSONObject.parseObject(data);
				vb.getJsonObjValidate().put("data", data);
				RchlValidateTools.validate(vb);
				// 车场编号
				clientID = jsonData.getString("clientID");
				// 卡号
				String cardCode = jsonData.getString("cardCode");
				// 车牌
				String plateNo = jsonData.getString("plateNo");
				// 入场时间
				String inDateTime = jsonData.getString("inDateTime");
				// 入场岗停
				String inRoom = jsonData.getString("inRoom");

				vb.getRequiredValidate().clear();
				vb.getRequiredValidate().put("clientID", clientID);
				vb.getRequiredValidate().put("plateNo", plateNo);
				vb.getRequiredValidate().put("inDateTime", inDateTime);
				vb.getRequiredValidate().put("inRoom", inRoom);
				RchlValidateTools.validate(vb);
				/******* 验证字段 **************/

				ApReservationInReminder apReservationInReminder = new ApReservationInReminder();
				apReservationInReminder.setCardCode(cardCode);
				apReservationInReminder.setCarNum(plateNo);
				apReservationInReminder.setInDateTime(DateUtils.parseDate(inDateTime, DateUtils.DATE_LONG_DATE));
				apReservationInReminder.setInRoom(inRoom);
				apReservationInReminder.setParkId(clientID);
				apReservationInReminder.setSupplyID(supplyID);
				// 预定车辆入场 业务
				// reportFacade.Park_EventAlert_ParkingAreaPrep(apReservationInReminder);
				cacheServiceFacade.reserve_incheck_queue_push(apReservationInReminder);
			} else if (requestFun.equals(RequestFunEnum.Park_ParkTypeSync.name())) {
				// 计费规则变更同步推送 目前暂不实现 因为这个接口取消掉了

			} else if (requestFun.equals(RequestFunEnum.Park_ParkInSync.name())) {
				// 车辆进场信息同步推送
				_log.info("收到了车辆进场信息::supplyID=" + supplyID + ",requestFun=" + requestFun);
				/******* 验证字段 **************/
				RchlValidateTools.validate(vb);

				Document doc = DocumentHelper.parseText(data);
				Element root = doc.getRootElement();
				// 上报的条数
				String syncCount = root.attributeValue("sync_Count");
				// 表示最后一笔入场流水号
				String sync_ID = root.attributeValue("sync_ID");
				// 车场编号
				clientID = root.attributeValue("clientID");
				int count = Integer.valueOf(syncCount);
				List<Element> parkInInfos = root.selectNodes("parkInInfo");
				// 存储进场记录
				List<ApApproachRecord> approachRecords = new ArrayList<ApApproachRecord>();
				for (int i = 0; i < count; i++) {
					Element element = parkInInfos.get(i);
					// 卡号
					String cardCode = element.selectSingleNode("cardCode").getText();
					// 车牌号
					String carNumber = element.selectSingleNode("carNumber").getText();
					// 入场流水号
					String enInID = element.selectSingleNode("enInID").getText();
					// 车辆入场时间
					String enterTime = element.selectSingleNode("enterTime").getText();
					// 入场岗亭
					String roomName = element.selectSingleNode("roomName").getText();
					// 卡类型 (1工作卡2储值卡3月租卡4临时卡5vip卡6其它)
					// String
					// cardType=element.selectSingleNode("cardType").getText();
					// 车辆类型 (0摩托车1小型车2大型车3超大型车)
					String carType = element.selectSingleNode("carType").getText();

					// 车牌属性
					String cardType = element.selectSingleNode("cardType")==null?"":element.selectSingleNode("cardType").getText();
					// 进场通道
					String passID = element.selectSingleNode("passID")==null?"":element.selectSingleNode("passID").getText();
					// 操作员
					String opName = element.selectSingleNode("opName") == null ? ""
							: element.selectSingleNode("opName").getText();
					// 进场图片的base64编码
					String parkInPic = element.selectSingleNode("parkInPic") == null ? ""
							: element.selectSingleNode("parkInPic").getText();
					String picName = null;
					if (!StringUtils.isBlank(parkInPic)) {
						parkInPic = parkInPic.replaceAll(" ", "+");// 处理博思高传图片的时侯把+号变成空格了
						picName = ImgUtil.getInPicName(supplyID, enInID);
						picName = uploadImg(parkInPic, picName);
						parkInPic = null;
						// 这里要转回去
						// Base64.GenerateImage(parkInPic, "test.jpg");
					}
					
					ApApproachRecord record = new ApApproachRecord();
					record.setSupplyID(supplyID);
					record.setParkId(clientID);
					record.setCardCode(cardCode);
					if(!StringUtil.isBlank(cardType)){
						record.setCardType(Integer.valueOf(cardType));
					}
					record.setPassID(passID);
					record.setOpName(opName);
					record.setParkInPic("");
					// record.setCardType(Integer.valueOf(cardType));
					record.setCarNum(carNumber);
					record.setCarType(Integer.valueOf(carType));
					record.setEnInID(enInID);
					record.setEnterTime(DateUtils.parseDate(enterTime, DateUtils.DATE_LONG_DATE));
					record.setRoomName(roomName);
					record.setParkInPic(picName);
					approachRecords.add(record);

					// 处理进场
					_log.info(
							"车辆进场信息内容:syncCount={},sync_ID={},clientID={},cardCode={},carNumber={},enInID={},enterTime={},roomName={},carType={}",
							syncCount, sync_ID, clientID, cardCode, carNumber, enInID, enterTime, roomName, carType);
					// reportFacade.Park_ParkInSync(record);
					cacheServiceFacade.car_inckeck_queue_push(record);
					_log.info("进场记录处理完成");
				}

				/******* 验证字段 **************/
			} else if (requestFun.equals(RequestFunEnum.Park_ParkOutSync.name())) {
				// 车辆出场信息同步推送
				
				_log.info("收到了车辆出场信息::supplyID=" + supplyID + ",requestFun=" + requestFun);
				/******* 验证字段 **************/
				RchlValidateTools.validate(vb);

				Document doc = DocumentHelper.parseText(data);
				Element root = doc.getRootElement();

				// 上报的条数
				String syncCount = root.attributeValue("sync_Count");
				// 表示最后一笔入场流水号
				String sync_ID = root.attributeValue("sync_ID");
				// 车场编号
				clientID = root.attributeValue("clientID");

				int count = Integer.valueOf(syncCount);
				List<Element> parkInInfos = root.selectNodes("parkOutInfo");
				List<ApAppearanceRecord> appearanceRecords = new ArrayList<ApAppearanceRecord>();
				for (int i = 0; i < count; i++) {
					Element element = parkInInfos.get(i);

					// 卡号
					String cardCode = element.selectSingleNode("cardCode").getText();
					// 车牌号
					String carNumber = element.selectSingleNode("carNumber").getText();
					// 入场流水号
					String enInID = element.selectSingleNode("enInID").getText();
					// 车辆入场时间
					String enterTime = element.selectSingleNode("enterTime").getText();
					// 入场岗亭
					String roomName = element.selectSingleNode("roomName").getText();
					// 出场流水号(唯一)
					String enOutID = element.selectSingleNode("enOutID").getText();
					// 出场时间(格式:yyyyMMddHHmmss)
					String outTime = element.selectSingleNode("outTime").getText();
					// 出场岗亭
					String outRoomName = element.selectSingleNode("outRoomName").getText();
					// 出场操作类型(0未放行1确认放行2自动放行3手动(软件)4手动按键5磁卡放行6冲卡拍照7无卡车放行8未确认放行(刷工作卡))
					String opType = element.selectSingleNode("opType").getText();
					// 出场特殊处理事件(0默认1免费车2消费车)
					String opSpecial = element.selectSingleNode("opSpecial").getText();
					// 卡类型 (1工作卡2储值卡3月租卡4临时卡5vip卡6其它)
					String cardType = element.selectSingleNode("cardType").getText();
					// 车辆类型 (0摩托车1小型车2大型车3超大型车)
					String carType = element.selectSingleNode("carType").getText();
					// 应交费金额(分为单位)
					String shouldFeeMoney = element.selectSingleNode("shouldFeeMoney").getText();
					// 实交费金额(分为单位)
					String feeMoney = element.selectSingleNode("feeMoney").getText();

					String payOrderID = element.selectSingleNode("payOrderID")==null?"":element.selectSingleNode("payOrderID").getText();

					String opName = element.selectSingleNode("opName")==null?"":element.selectSingleNode("opName").getText();

					String parkInPic = element.selectSingleNode("parkInPic") == null ? ""
							: element.selectSingleNode("parkInPic").getText();
					String parkOutPic = element.selectSingleNode("parkOutPic") == null ? ""
							: element.selectSingleNode("parkOutPic").getText();
					String inPicName = null;
					String outPicName = null;
					if (!StringUtils.isBlank(parkInPic)) {
						parkInPic = parkInPic.replaceAll(" ", "+");// 处理博思高传图片的时侯把+号变成空格了
						inPicName = ImgUtil.getInPicName(supplyID, enInID);
						inPicName = uploadImg(parkInPic, inPicName);
						parkInPic = null;
						// _log.info("parkInPic:" + parkInPic);
					}
					if (!StringUtils.isBlank(parkOutPic)) {
						parkOutPic = parkOutPic.replaceAll(" ", "+");// 处理博思高传图片的时侯把+号变成空格了
																		// 这里要转回去
						outPicName = ImgUtil.getOutPicName(supplyID, enOutID);
						outPicName = uploadImg(parkOutPic, outPicName);
						parkOutPic = null;
						// _log.info("parkOutPic:" + parkOutPic);
					}
					ApAppearanceRecord record = new ApAppearanceRecord();
					record.setSupplyID(supplyID);
					record.setParkId(clientID);
					record.setCardCode(cardCode);
					record.setCardType(Integer.valueOf(cardType));
					record.setCarNum(carNumber);
					record.setCarType(Integer.valueOf(carType));
					record.setEnInID(enInID);
					record.setEnterTime(DateUtils.parseDate(enterTime, DateUtils.DATE_LONG_DATE));
					record.setRoomName(roomName);
					record.setEnOutID(enOutID);
					record.setFeeMoney(Integer.valueOf(feeMoney));
					record.setOpSpecial(Integer.valueOf(opSpecial));
					record.setOpType(Integer.valueOf(opType));
					record.setOutRoomName(outRoomName);
					record.setOutTime(DateUtils.parseDate(outTime, DateUtils.DATE_LONG_DATE));
					record.setRoomName(roomName);
					record.setShouldFeeMoney(Integer.valueOf(shouldFeeMoney));
					record.setPayOrderID(payOrderID);
					record.setParkInPic(inPicName);
					record.setParkOutPic(outPicName);
					record.setOpName(opName);

					// appearanceRecords.add(record);
					_log.info(
							"车辆出场信息内容:syncCount={},sync_ID={},clientID={},cardCode={},carNumber={},enInID={},enterTime={},roomName={},carType={},enOutID={},outTime={},outRoomName={},opType={},opSpecial={},cardType={},shouldFeeMoney={},feeMoney={},payOrderID={},opName={}",
							syncCount, sync_ID, clientID, cardCode, carNumber, enInID, enterTime, roomName, carType,
							enOutID, outTime, outRoomName, opType, opSpecial, cardType, shouldFeeMoney, feeMoney,
							payOrderID, opName);
					// reportFacade.Park_ParkOutSync(record);
					parkOutPic = null;
					parkInPic = null;
					cacheServiceFacade.car_outckeck_queue_push(record);
					_log.info("出场记录处理完成");
				}
				/******* 验证字段 **************/
			} else if (requestFun.equals(RequestFunEnum.Park_MonthlyFeeSync.name())) {
				_log.info("线下月租缴费单处理完成");
				_log.info("收到了月租缴费单::supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data);
				RchlValidateTools.validate(vb);
				Document doc = DocumentHelper.parseText(data);
				Element root = doc.getRootElement();
				// 上报的条数
				String syncCount = root.attributeValue("sync_Count");
				// 表示最后一笔入场流水号
				String sync_ID = root.attributeValue("sync_ID");
				// 车场编号
				clientID = root.attributeValue("clientID");
				int count = Integer.valueOf(syncCount);
				List<Element> parkMonthlyFeeInfos = root.selectNodes("parkMonthlyFeeInfo");

				List<ApAppearanceRecord> appearanceRecords = new ArrayList<ApAppearanceRecord>();

				for (int i = 0; i < count; i++) {
					Element element = parkMonthlyFeeInfos.get(i);
					// 车场支付号
					String payID = element.selectSingleNode("payID").getText();
					// 卡号
					String cardCode = element.selectSingleNode("cardCode").getText();
					// 车牌
					String carNumber = element.selectSingleNode("carNumber").getText();
					// 用户名
					String member_Name = element.selectSingleNode("member_Name").getText();
					// 续费时间
					String recharge_Date = element.selectSingleNode("recharge_Date").getText();
					// 应付金额
					String shouldPayment_Amount = element.selectSingleNode("shouldPayment_Amount").getText();
					// 支付金额
					String payment_Amount = element.selectSingleNode("payment_Amount").getText();
					// 续费开始时间
					String monthly_StartTime = element.selectSingleNode("monthly_StartTime").getText();
					// 续费结束时间
					String monthly_EndTime = element.selectSingleNode("monthly_EndTime").getText();
					// 支付 模式
					String addFeeMode = element.selectSingleNode("addFeeMode").getText();
					// 线上支付订单号
					String payOrderID = element.selectSingleNode("payOrderID").getText();

					if (StringUtils.isBlank(payOrderID)) {
						// 线下缴费单
						ApMonthlyFeeInfo record = new ApMonthlyFeeInfo();
						record.setAddFeeMode(Integer.valueOf(addFeeMode));
						record.setCardCode(cardCode);
						record.setCarNum(carNumber);
						record.setMemberName(member_Name);
						record.setMonthlyEndTime(DateUtils.parseDate(monthly_EndTime, DateUtils.DATE_LONG_DATE));
						record.setMonthlyStartTime(DateUtils.parseDate(monthly_StartTime, DateUtils.DATE_LONG_DATE));
						record.setPayID(payID);
						record.setPaymentAmount(Integer.valueOf(payment_Amount));
						record.setPayOrderID(payOrderID);
						record.setRechargeDate(DateUtils.parseDate(recharge_Date, DateUtils.DATE_LONG_DATE));
						record.setShouldPaymentAmount(Integer.valueOf(shouldPayment_Amount));
						record.setParkCode(clientID);
						record.setSupplyID(supplyID);
						// 车场编号
						cacheServiceFacade.monthlyFeeSync_report(record);
					}

				}
				// cacheServiceFacade
			} else if (requestFun.equals(RequestFunEnum.Park_DayReportSync.name())) {
				_log.info("收到日报表::supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data);
				/******* 验证字段 **************/
				Document doc = DocumentHelper.parseText(data);
				Element root = doc.getRootElement();
				// 上报的条数
				String syncCount = root.attributeValue("sync_Count");
				// 表示最后一笔入场流水号
//				String sync_ID = root.attributeValue("sync_ID");
				// 车场编号
				clientID = root.attributeValue("clientID");
				int count = Integer.valueOf(syncCount);
				Element dayReportInfo = (Element) root.selectSingleNode("dayReportInfo");
				String oPTime = dayReportInfo.selectSingleNode("OPTime").getText();
				String oPCode = dayReportInfo.selectSingleNode("OPCode").getText();
				String oPName = dayReportInfo.selectSingleNode("OPName").getText();
				String during = dayReportInfo.selectSingleNode("During").getText();
				String outTimes = dayReportInfo.selectSingleNode("OutTimes").getText();
				String lostCard = dayReportInfo.selectSingleNode("LostCard").getText();
				String enterTimes = dayReportInfo.selectSingleNode("EnterTimes").getText();
				String payCard = dayReportInfo.selectSingleNode("PayCard").getText();
				String money = dayReportInfo.selectSingleNode("Money").getText();
				String offPay = dayReportInfo.selectSingleNode("OffPay").getText();
				String monthPay = dayReportInfo.selectSingleNode("MonthPay").getText();
				String saveCardPay = dayReportInfo.selectSingleNode("SaveCardPay").getText();
				String enManual = dayReportInfo.selectSingleNode("EnManual").getText();
				String outManual = dayReportInfo.selectSingleNode("OutManual").getText();
				String freeTimes = dayReportInfo.selectSingleNode("FreeTimes").getText();
				String noCardTimes = dayReportInfo.selectSingleNode("NoCardTimes").getText();
				String feeAheadMoney = dayReportInfo.selectSingleNode("FeeAheadMoney").getText();
				String calcMonthPay = dayReportInfo.selectSingleNode("CalcMonthPay").getText();
				String calcSaveCardPay = dayReportInfo.selectSingleNode("CalcSaveCardPay").getText();
				String calcMoney = dayReportInfo.selectSingleNode("CalcMoney").getText();
				ApDayReportInfo apDayReportInfo = new ApDayReportInfo();
				apDayReportInfo.setSupplyID(supplyID);
				apDayReportInfo.setClientID(clientID);
				apDayReportInfo.setCalcMoney(calcMoney);
				apDayReportInfo.setCalcMonthPay(calcMonthPay);
				apDayReportInfo.setCalcSaveCardPay(calcSaveCardPay);
				apDayReportInfo.setDuring(during);
				apDayReportInfo.setEnManual(enManual);
				apDayReportInfo.setEnterTimes(enterTimes);
				apDayReportInfo.setFreeTimes(freeTimes);
				apDayReportInfo.setFeeAheadMoney(feeAheadMoney);
				apDayReportInfo.setLostCard(lostCard);
				apDayReportInfo.setMoney(calcMoney);
				apDayReportInfo.setMonthPay(calcMonthPay);
				apDayReportInfo.setNoCardTimes(noCardTimes);
				apDayReportInfo.setOffPay(offPay);
				apDayReportInfo.setoPCode(oPCode);
				apDayReportInfo.setoPName(oPName);
				apDayReportInfo.setoPTime(StringUtils.isBlank(oPTime)?null:DateUtils.parseDate(oPTime, DateUtils.DATE_SHORT_DATEONLY));
				apDayReportInfo.setOutManual(outManual);
				apDayReportInfo.setOutTimes(outTimes);
				apDayReportInfo.setPayCard(payCard);
				apDayReportInfo.setSaveCardPay(calcSaveCardPay);
				cacheServiceFacade.dayReportSync_report(apDayReportInfo);
				_log.info("日报表处理完成");
			}
			
			else {
				_log.info("非法的requestFun 属性值=" + requestFun);
				return ResponseHelper.createEmptyStringXmlResponseSuccess("", "不可识别的requestFun属性值:" + requestFun);
			}
			return ResponseHelper.createEmptyStringXmlResponseSuccess();
		} catch (RchlValidatorException e) {
			exceptionHandle.handle(e);
			return ResponseHelper.createEmptyStringXmlResponseFail("", e.getExceptionMessage().getSimpleText());
		} catch (BaseException e) {
			exceptionHandle.handle(e);
			return ResponseHelper.createEmptyStringXmlResponseFail("", e.getExceptionMessage().getSimpleText());
		} catch (Exception e) {
			SystemUnKnown ex = new SystemUnKnown(e, ExceptionMessage.createExceptionMessage(SystemUnKnown.default_Name,
					"未知Exception", "supplyID=" + supplyID + ",requestFun=" + requestFun + ",data=" + data));
			exceptionHandle.handle(ex);
			return ResponseHelper.createEmptyStringXmlResponseFail("", "系统处理异常!!");
		}

	}
	// @RequestMapping("/report")
	// public String report(String supplyID, String requestFun, String data) {
	//
	// try {
	// _log.info("收到::supplyID="+supplyID+",requestFun="+requestFun+",data="+data);
	// /****** 验证字段 ********/
	// RchlValidateBean vb = new RchlValidateBean();
	// vb.getRequiredValidate().put("supplyID", supplyID);
	// vb.getRequiredValidate().put("requestFun", requestFun);
	// vb.getRequiredValidate().put("data", data);
	//
	// /**************/
	//
	// if
	// (requestFun.equals(RequestFunEnum.Park_EventAlert_ParkingApply.name())) {
	// // 来访提醒推送
	// /*******验证字段**************/
	// JSONObject jsonData=JSONObject.parseObject(data);
	// vb.getJsonObjValidate().put("data", data);
	// RchlValidateTools.validate(vb);
	// //车场编号
	// String clientID=jsonData.getString("clientID");
	// //卡号
	// String cardCode=jsonData.getString("cardCode");
	// //车牌
	// String plateNo=jsonData.getString("plateNo");
	// //入场时间
	// String inDateTime=jsonData.getString("inDateTime");
	// //入场岗停
	// String inRoom=jsonData.getString("inRoom");
	//
	// vb.getRequiredValidate().clear();
	//
	// vb.getRequiredValidate().put("clientID", clientID);
	// vb.getRequiredValidate().put("plateNo", plateNo);
	// vb.getRequiredValidate().put("inDateTime", inDateTime);
	// vb.getRequiredValidate().put("inRoom", inRoom);
	// RchlValidateTools.validate(vb);
	// /********验证字段*******************/
	//
	// ApVisitingReminder apVisitingReminder=new ApVisitingReminder();
	// apVisitingReminder.setCardCode(cardCode);
	// apVisitingReminder.setCarNum(plateNo);
	// apVisitingReminder.setInDateTime(DateUtils.parseDate(inDateTime,
	// DateUtils.DATE_LONG_DATE));
	// apVisitingReminder.setInRoom(inRoom);
	// apVisitingReminder.setParkId(clientID);
	// apVisitingReminder.setSupplyID(supplyID);
	//
	// reportFacade.park_EventAlert_ParkingApply(apVisitingReminder);
	// } else if
	// (requestFun.equals(RequestFunEnum.Park_EventAlert_LockedCar.name())) {
	// // 锁车辆出场报警推送
	//
	// /*******验证字段**************/
	// JSONObject jsonData=JSONObject.parseObject(data);
	// vb.getJsonObjValidate().put("data", data);
	// RchlValidateTools.validate(vb);
	// //车场编号
	// String clientID=jsonData.getString("clientID");
	// //卡号
	// String cardCode=jsonData.getString("cardCode");
	// //车牌
	// String plateNo=jsonData.getString("plateNo");
	// //入场时间
	// String inDateTime=jsonData.getString("inDateTime");
	// //入场岗停
	// String inRoom=jsonData.getString("inRoom");
	//
	// vb.getRequiredValidate().clear();
	// vb.getRequiredValidate().put("clientID", clientID);
	// vb.getRequiredValidate().put("plateNo", plateNo);
	// vb.getRequiredValidate().put("inDateTime", inDateTime);
	// vb.getRequiredValidate().put("inRoom", inRoom);
	// RchlValidateTools.validate(vb);
	// /*******验证字段**************/
	//
	// ApCarLockAlarm apCarLockAlarm=new ApCarLockAlarm();
	// apCarLockAlarm.setAlarmTime(DateUtils.parseDate(inDateTime,
	// DateUtils.DATE_LONG_DATE));
	// apCarLockAlarm.setCardCode(cardCode);
	// apCarLockAlarm.setCarNum(plateNo);
	// apCarLockAlarm.setOutRoom(inRoom);
	// apCarLockAlarm.setParkId(clientID);
	// apCarLockAlarm.setSupplyID(supplyID);
	// reportFacade.park_EventAlert_LockedCar(apCarLockAlarm);
	// } else if
	// (requestFun.equals(RequestFunEnum.Park_EventAlert_ParkingAreaPrep.name()))
	// {
	// // 预定车辆入场 推送
	//
	// /*******验证字段**************/
	// JSONObject jsonData=JSONObject.parseObject(data);
	// vb.getJsonObjValidate().put("data", data);
	// RchlValidateTools.validate(vb);
	// //车场编号
	// String clientID=jsonData.getString("clientID");
	// //卡号
	// String cardCode=jsonData.getString("cardCode");
	// //车牌
	// String plateNo=jsonData.getString("plateNo");
	// //入场时间
	// String inDateTime=jsonData.getString("inDateTime");
	// //入场岗停
	// String inRoom=jsonData.getString("inRoom");
	//
	// vb.getRequiredValidate().clear();
	// vb.getRequiredValidate().put("clientID", clientID);
	// vb.getRequiredValidate().put("plateNo", plateNo);
	// vb.getRequiredValidate().put("inDateTime", inDateTime);
	// vb.getRequiredValidate().put("inRoom", inRoom);
	// RchlValidateTools.validate(vb);
	// /*******验证字段**************/
	//
	// ApReservationInReminder apReservationInReminder=new
	// ApReservationInReminder();
	// apReservationInReminder.setCardCode(cardCode);
	// apReservationInReminder.setCarNum(plateNo);
	// apReservationInReminder.setInDateTime(DateUtils.parseDate(inDateTime,
	// DateUtils.DATE_LONG_DATE));
	// apReservationInReminder.setInRoom(inRoom);
	// apReservationInReminder.setParkId(clientID);
	// apReservationInReminder.setSupplyID(supplyID);
	// //预定车辆入场 业务
	// reportFacade.Park_EventAlert_ParkingAreaPrep(apReservationInReminder);
	// } else if (requestFun.equals(RequestFunEnum.Park_ParkTypeSync.name())) {
	// // 计费规则变更同步推送 目前暂不实现 因为这个接口取消掉了
	//
	// } else if (requestFun.equals(RequestFunEnum.Park_ParkInSync.name())) {
	// // 车辆进场信息同步推送
	// /*******验证字段**************/
	// RchlValidateTools.validate(vb);
	//
	// Document doc=DocumentHelper.parseText(data);
	// Element root =doc.getRootElement();
	// //上报的条数
	// String syncCount=root.attributeValue("sync_Count");
	// //表示最后一笔入场流水号
	// String sync_ID=root.attributeValue("sync_ID");
	// //车场编号
	// String clientID=root.attributeValue("clientID");
	// int count=Integer.valueOf(syncCount);
	// List<Element> parkInInfos=root.selectNodes("parkInInfo");
	// //存储进场记录
	// List<ApApproachRecord> approachRecords=new ArrayList<ApApproachRecord>();
	// for(int i=0;i<count;i++){
	// Element element=parkInInfos.get(i);
	// //卡号
	// String cardCode=element.selectSingleNode("cardCode").getText();
	// //车牌号
	// String carNumber=element.selectSingleNode("carNumber").getText();
	// //入场流水号
	// String enInID=element.selectSingleNode("enInID").getText();
	// //车辆入场时间
	// String enterTime=element.selectSingleNode("enterTime").getText();
	// //入场岗亭
	// String roomName=element.selectSingleNode("roomName").getText();
	// //卡类型 (1工作卡2储值卡3月租卡4临时卡5vip卡6其它)
	//// String cardType=element.selectSingleNode("cardType").getText();
	// //车辆类型 (0摩托车1小型车2大型车3超大型车)
	// String carType=element.selectSingleNode("carType").getText();
	//
	// ApApproachRecord record=new ApApproachRecord();
	// record.setSupplyID(supplyID);
	// record.setParkId(clientID);
	// record.setCardCode(cardCode);
	//// record.setCardType(Integer.valueOf(cardType));
	// record.setCarNum(carNumber);
	// record.setCarType(Integer.valueOf(carType));
	// record.setEnInID(enInID);
	// record.setEnterTime(DateUtils.parseDate(enterTime,
	// DateUtils.DATE_LONG_DATE));
	// record.setRoomName(roomName);
	// approachRecords.add(record);
	//
	// //处理进场
	// reportFacade.Park_ParkInSync(record);
	// }
	//
	// /*******验证字段**************/
	// } else if (requestFun.equals(RequestFunEnum.Park_ParkOutSync.name())) {
	// // 车辆出场信息同步推送
	// /*******验证字段**************/
	// RchlValidateTools.validate(vb);
	//
	// Document doc=DocumentHelper.parseText(data);
	// Element root =doc.getRootElement();
	// //上报的条数
	// String syncCount=root.attributeValue("sync_Count");
	// //表示最后一笔入场流水号
	// String sync_ID=root.attributeValue("sync_ID");
	// //车场编号
	// String clientID=root.attributeValue("clientID");
	//
	// int count=Integer.valueOf(syncCount);
	// List<Element> parkInInfos=root.selectNodes("parkOutInfo");
	// List<ApAppearanceRecord> appearanceRecords=new
	// ArrayList<ApAppearanceRecord>();
	// for(int i=0;i<count;i++){
	// Element element=parkInInfos.get(i);
	//
	// //卡号
	// String cardCode=element.selectSingleNode("cardCode").getText();
	// //车牌号
	// String carNumber=element.selectSingleNode("carNumber").getText();
	// //入场流水号
	// String enInID=element.selectSingleNode("enInID").getText();
	// //车辆入场时间
	// String enterTime=element.selectSingleNode("enterTime").getText();
	// //入场岗亭
	// String roomName=element.selectSingleNode("roomName").getText();
	// //出场流水号(唯一)
	// String enOutID=element.selectSingleNode("enOutID").getText();
	// //出场时间(格式:yyyyMMddHHmmss)
	// String outTime=element.selectSingleNode("outTime").getText();
	// //出场岗亭
	// String outRoomName=element.selectSingleNode("outRoomName").getText();
	// //出场操作类型(0未放行1确认放行2自动放行3手动(软件)4手动按键5磁卡放行6冲卡拍照7无卡车放行8未确认放行(刷工作卡))
	// String opType=element.selectSingleNode("opType").getText();
	// //出场特殊处理事件(0默认1免费车2消费车)
	// String opSpecial=element.selectSingleNode("opSpecial").getText();
	// //卡类型 (1工作卡2储值卡3月租卡4临时卡5vip卡6其它)
	// String cardType=element.selectSingleNode("cardType").getText();
	// //车辆类型 (0摩托车1小型车2大型车3超大型车)
	// String carType=element.selectSingleNode("carType").getText();
	// //应交费金额(分为单位)
	// String
	// shouldFeeMoney=element.selectSingleNode("shouldFeeMoney").getText();
	// //实交费金额(分为单位)
	// String feeMoney=element.selectSingleNode("feeMoney").getText();
	//
	// ApAppearanceRecord record=new ApAppearanceRecord();
	// record.setSupplyID(supplyID);
	// record.setParkId(clientID);
	// record.setCardCode(cardCode);
	// record.setCardType(Integer.valueOf(cardType));
	// record.setCarNum(carNumber);
	// record.setCarType(Integer.valueOf(carType));
	// record.setEnInID(enInID);
	// record.setEnterTime(DateUtils.parseDate(enterTime,
	// DateUtils.DATE_LONG_DATE));
	// record.setRoomName(roomName);
	// record.setEnOutID(enOutID);
	// record.setFeeMoney(Integer.valueOf(feeMoney));
	// record.setOpSpecial(Integer.valueOf(opSpecial));
	// record.setOpType(Integer.valueOf(opType));
	// record.setOutRoomName(outRoomName);
	// record.setOutTime(DateUtils.parseDate(outTime,
	// DateUtils.DATE_LONG_DATE));
	// record.setRoomName(roomName);
	// record.setShouldFeeMoney(Integer.valueOf(shouldFeeMoney));
	// appearanceRecords.add(record);
	//
	// reportFacade.Park_ParkOutSync(record);
	// }
	// /*******验证字段**************/
	// } else {
	// _log.info("非法的requestFun 属性值="+requestFun);
	// return ResponseHelper.createEmptyStringXmlResponseFail("",
	// "不可识别的requestFun属性值:" + requestFun);
	// }
	// return ResponseHelper.createEmptyStringXmlResponseSuccess();
	// } catch (RchlValidatorException e) {
	// exceptionHandle.handle(e);
	// return ResponseHelper.createEmptyStringXmlResponseFail("",
	// e.getExceptionMessage().getSimpleText());
	// }catch (BaseException e) {
	// exceptionHandle.handle(e);
	// return ResponseHelper.createEmptyStringXmlResponseFail("",
	// e.getExceptionMessage().getSimpleText());
	// }catch (Exception e) {
	// SystemUnKnown ex = new SystemUnKnown(e,
	// ExceptionMessage.createExceptionMessage(SystemUnKnown.default_Name,
	// "未知Exception", "supplyID=" + supplyID + ",requestFun=" + requestFun +
	// ",data=" + data));
	// exceptionHandle.handle(ex);
	// return ResponseHelper.createEmptyStringXmlResponseFail("", "系统处理异常!!");
	// }
	//
	// }
}
